#include "File.h"


int File_Pathname( char * File_name )
{
    if (NULL == File_name || 0 == strlen(File_name))
    {
        ERRLOG("文件名不能为空");
        return EOF;
    }

    // 获取当前路径
    char filename[256];
    char buffer[128];

    FILE *fp_p;
    
    // 获取文件相对路径
    strcpy(filename , File_name);

    // 运行 shell 命令并读取输出
    fp_p = popen("pwd", "r");
    if (fp_p == NULL) {
        perror("popen 失败");
        return 1;
    }

    // 读取并输出命令的结果
    while (fgets(buffer, sizeof(buffer), fp_p) != NULL) {
        // printf("%s", buffer);
    }

    // 关闭管道
    pclose(fp_p);
    fp_p = NULL;

    buffer[strlen(buffer) - 1] = '\0';

    strcat( buffer , filename );
    printf("%s\n" , buffer);

    // 拷贝路径给 File_name 做返回
    strcpy( File_name , buffer );

    return 0;
}



// 写入到文件中
int File_printf( Double_Link_List * list )
{
    if (NULL == list)
    {
        ERRLOG("链表没有传入");
        return EOF;
    }

    // 写入文件
    // 获取文件路径
    char File_name[256] = "/data/data.txt";
    File_Pathname(File_name);

    // 打开文件 清空写
    FILE * fp = fopen( File_name , "w+" );
    if ( NULL == fp )
    {
        ERRLOG("文件打开失败");
        return EOF;
    }
    
    // 写入到文件中
    Double_Node * ptr_node = list->next;

    for (size_t i = 0; NULL != ptr_node ; i++)
    {
        fprintf( fp , "%s\t%s\t%d\t%d\t%d\n" , \
        ptr_node->data.name , ptr_node->data.sex , ptr_node->data.age,\
        ptr_node->data.id , ptr_node->data.sco \
        );
        ptr_node = ptr_node->next;
    }

    // 文件关闭
    fclose(fp);
    fp = NULL;

    return 0;
}


// 从文件中读取
int File_scanf( Double_Link_List * list )
{
    if (NULL == list)
    {
        ERRLOG("链表没有传入");
        return EOF;
    }

    // 读取文件

    // 获取文件路径
    char File_name[256] = "/data/data.txt";
    File_Pathname(File_name);

    // 打开文件 清空写
    FILE * fp = fopen( File_name , "r+" );
    if ( NULL == fp )
    {
        ERRLOG("文件打开失败");
        return EOF;
    }

    // 获取文件行数
    int n_num = 0;
    char ch = 0;
    while (EOF != (ch = fgetc(fp)))
    {
        if ('\n' == ch)
        {
            n_num++;
        }
    }

    // 回到文件头部
    fseek( fp , 0 , SEEK_SET );

    fflush(fp);
    
    
    // 读取到链表中
    Elenemt_data data;

    for (size_t i = 0; i < n_num ; i++)
    {
        fscanf( fp , "%s\t%s\t%d\t%d\t%d\n" , \
        data.name , data.sex , &data.age,\
        &data.id , &data.sco \
        );
        insert_double_link_list( list , data , i + 1 );
    }

    // 文件关闭
    fclose(fp);
    fp = NULL;

    return 0;
}